package com.mfz.common.definition

import com.mfz.common.definition.symbol.Flag
import com.mfz.common.definition.symbol.Type
import com.mfz.common.units.FLAG
import com.mfz.common.units.ID
import com.mfz.common.units.NAME
import com.mfz.common.units.TYPE


/**
 * 实体接口的父接口。
 * 用以定义一些通用的接口属性
 */
interface Entity {
	/**
	 * 当前对象是否可用
	 */
	val isAvailable: Boolean get() = flag.notDelete

	/**
	 * 当前的id,唯一标识
	 */
	val id: Int get() = get(ID) ?: -1
	val name: String get() = get(NAME) ?: ""
	/**
	 * 当前对象的状态,默认为"未知状态"
	 */
	val flag: Flag get() = Flag.findById(get(FLAG) ?: 0)
	/**
	 *  当前对象的类型,默认为"未知类型"
	 */
	val type: Type get() = Type.findById(get(TYPE) ?: 0)

	/**
	 * 通过一个名字来得到一个值的方法
	 * 有可能为空,也有可能出现类型无法转换的异常
	 */
	fun <U> get(name: String): U?


}
